home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #6 / Amiga Plus CD - 1996 - No. 06.iso / pd / disktools / hdsleep / source / beginio.a next >
Text File  |  1996-08-04  |  2KB  |  77 lines

  1.     SECTION assembly,code
  2.  
  3.     XREF _OldBeginIO
  4.     XREF _Computer
  5.  
  6.     include "lvo/exec_lib.i"
  7.  
  8. ;
  9. ; Call scsi.device BeginIO()
  10. ; void CallBeginIO(struct register __a1 struct IORequest *);
  11. ;
  12.  
  13.     XDEF _CallBeginIO
  14. _CallBeginIO:
  15.     move.l _OldBeginIO,-(sp)
  16.     rts
  17.  
  18. ;
  19. ; Turn unit D0 to sleep
  20. ; void HDDriveOff(register __d0 UBYTE HDUnit);
  21. ;
  22.  
  23.     XDEF _HDDriveOff
  24. _HDDriveOff:
  25.     move.l    (4).w,a0    ; Get ExecBase
  26.     jsr    _LVOForbid(a0)
  27.     jsr    ChangeUnit    ; ChangeUnit();
  28.     cmp.l    #0,_Computer    ; if 1 then a4000
  29.     beq    a1200
  30.     lea    $dd203e,a0    ; HD command register (A1200)
  31.     bra    skip
  32. a1200:    lea    $da201e,a0    ; HD command register (A4000)
  33. skip:    move.b    #$e0,(a0)    ; Standby Immediate
  34.     move.b    #$e3,(a0)    ; Idle
  35. OffEnd:    move.l    (4).w,a0    ; Get ExecBase
  36.     jsr    _LVOPermit(a0)    ; Permit();
  37.     rts
  38.  
  39. ;
  40. ; Check unit D0 for hd present (does it work?)
  41. ; UBYTE CheckHD(register __d0 UBYTE HDUnit);
  42. ;
  43.  
  44.     XDEF _CheckHD
  45. _CheckHD:
  46.     move.l    (4).w,a0    ; Get ExecBase
  47.     jsr    _LVOForbid(a0)
  48.     jsr    ChangeUnit    ; ChangeUnit();
  49.     clr.b    d0
  50.     tst.l    _Computer    ; if 1 then a4000
  51.     beq    a4k3
  52.     cmpi.b    #$50,($da201e)    ; HD status register (A1200)
  53.     seq    d0        ; if(DrivePresent) d0=TRUE;
  54.     bra    skip2
  55. a4k3:    cmpi.b    #$50,($dd203e)    ; HD status register (A4000)
  56.     seq    d0        ; if(DrivePresent) d0=TRUE;
  57. skip2:    move.l    (4).w,a0    ; Get ExecBase
  58.     jsr    _LVOPermit(a0)
  59.     rts
  60.  
  61. ;
  62. ; Change to Unit D0
  63. ; void ChangeUnit(register __d0 UBYTE HDUnit);
  64. ;
  65.  
  66. ChangeUnit:
  67.     asl.l    #4,d0
  68.     ori.w    #$a0,d0
  69.     cmp.l    #0,_Computer    ; if 1 then a4000
  70.     beq    a12002
  71.     move.b    d0,($dd203a)    ; HD drive/unit register (A1200)
  72.     rts
  73. a12002:    move.b    d0,($da201a)    ; HD drive/unit register (A4000)
  74.     rts
  75.  
  76.     end
  77.